#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ABS(x) ((x) > 0 ? (x) : -(x))
char* convert(char* s, int numRows) {
    int len = strlen(s);
    int numLines = len / numRows;
    int step = ((numRows + numRows / 2) + 1) / 2 * 2;
    printf("len = %d, numRows = %d, numLines = %d, step = %d\r\n", len, numRows, numLines, step);

    int n = numRows * 2 - 2; // 一个|/ 有多少个字符
    int temp = (len + (n - 1)) / n; // 有多少个 |/
    int x = temp * (n - 2) - 1;
    int y = numRows;
    printf("n = %d, temp = %d, x = %d, y = %d\r\n", n, temp, x, y);
    for(int i = 0; i < y; i++) {
        int diff = step - (2 * (i % (numRows - 1)));
        // printf("%d ", diff);
        int k = 0;
        for(int j = 0; j < x; j++) {
            if((i * numLines + j) < len) {
                printf("%c ", s[i + k]);
                k += diff;
                printf("  ");
            }
        }
        printf("\r\n");
    }
    // for(int i = 0; i < numRows; i++) {
    //     int diff = step - (2 * (i % (numRows - 1)));
    //     printf("%d ", diff);
    //     int k = 0;
    //     for(int j = 0; j < numLines; j++) {
    //             // printf("*");
  

    //         // if((i * numLines + j) < len) {
    //         //     printf("%c ", s[i + j + k]);
    //             k += diff;
    //         //     // printf("  ");
    //         // }
    //     }
    //     printf("\r\n");

    // }
}

// 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
// 0   4   8   12
// P   A   H   N

// 1 3 5 7 9 11 13
// A P L S I I G

// 2   6   10
// Y   I   R

int main(void)
{
    char s[] = "PAYPALISHIRING";
    convert(s, 3);
    convert(s, 4);
    convert(s, 5);
    return 0;
}

/* ROW = 4 LINE = 3
 * P     I     N
 * A   L S   I G
 * Y A   H R
 * P     I
 * 
 */
/* ROW = 5 LINE = 2
 * 0       8
 * P       H
 * A     S I
 * Y   I   R
 * P L     I G
 * A       N
 * 
 * 
 */